// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE

// Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js

// declare global: coffeelint

(function(mod) {
  if (typeof exports == 'object' && typeof module == 'object')
    // CommonJS
    mod(require('../../lib/codemirror'));
  else if (typeof define == 'function' && define.amd)
    // AMD
    define(['../../lib/codemirror'], mod);
  // Plain browser env
  else mod(CodeMirror);
})(function(CodeMirror) {
  'use strict';

  CodeMirror.registerHelper('lint', 'coffeescript', function(text) {
    var found = [];
    if (!window.coffeelint) {
      if (window.console) {
        window.console.error(
          'Error: window.coffeelint not defined, CodeMirror CoffeeScript linting cannot run.',
        );
      }
      return found;
    }
    var parseError = function(err) {
      var loc = err.lineNumber;
      found.push({
        from: CodeMirror.Pos(loc - 1, 0),
        to: CodeMirror.Pos(loc, 0),
        severity: err.level,
        message: err.message,
      });
    };
    try {
      var res = coffeelint.lint(text);
      for (var i = 0; i < res.length; i++) {
        parseError(res[i]);
      }
    } catch (e) {
      found.push({
        from: CodeMirror.Pos(e.location.first_line, 0),
        to: CodeMirror.Pos(e.location.last_line, e.location.last_column),
        severity: 'error',
        message: e.message,
      });
    }
    return found;
  });
});
